Java: convert a file to a byte array, then convert byte array to a file.

In this post, I will show you how to convert a file to a byte array and then convert a byte array to a file.

To convert a file to byte array, ByteArrayOutputStream class is used. This class implements an output stream in which the data is written into a byte array. The buffer automatically grows as data is written to it. The data can be retrieved using toByteArray() and toString().

To convert byte array back to the original file, FileOutputStream class is used. A file output stream is an output stream for writing data to a File or to a FileDescriptor.

The following code has been fully tested.

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class genFile {
 
    public static void main(String[] args) throws FileNotFoundException, IOException {
        File file = new File("java.pdf");
 
        FileInputStream fis = new FileInputStream(file);
        //System.out.println(file.exists() + "!!");
        //InputStream in = resource.openStream();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        try {
            for (int readNum; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum); //no doubt here is 0
                //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
                System.out.println("read " + readNum + " bytes,");
            }
        } catch (IOException ex) {
            Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex);
        }
        byte[] bytes = bos.toByteArray();
 
        //below is the different part
        File someFile = new File("java2.pdf");
        FileOutputStream fos = new FileOutputStream(someFile);
        fos.write(bytes);
        fos.flush();
        fos.close();
    }
}

Why would someone like to convert a file to byte array?

There are various applications of this conversion. For example, convert file into byte to save into database, transfer file to other system using web service, etc.

Similarly, you can convert an image to byte array, see this post.

UPDATE(2015/12/16):
There is a very convenient method from com.google.common.io.FilestoByteArray(). Check out some examples here.

References:

1. ByteArrayOutputStream Java Doc
2. FileOutputStream Java Doc

19 thoughts on “Java: convert a file to a byte array, then convert byte array to a file.”

  1. Could u explain how to write the ByteArray (.docx file w already stored in DB as ByteArray ) which am getting from DB into PDF Document

  2. save the doc files as pdf.
    Open the doc file,
    Click File -> Save As,
    In the Save as type: drop down select PDF

  3. I tried this but the file created was padded with trailing nulls making it unusable. How do I get a file without trailing nulls?

  4. Thanks a lot. this code solves my problem which I was facing for last 1 week and looking for solution in the net. Thanks a lot again….

  5. How the byte pass to the bmp image , its give error with imaje.io methods pls tell me that how it solve!!!!!!!!!!!!!!!!!!!11

Leave a Comment